//////////////////////////////////////////////////////////////////////////

#ifndef _INPUT_H_
#include "input.h"
#endif

//////////////////////////////////////////////////////////////////////////

#ifndef _INPUTIMPL_H_
#include "inputimpl.h"
#endif

//////////////////////////////////////////////////////////////////////////


Input::Input()
{
    m_Impl = new InputImpl();

    AddEventToObserve(Observer::KEY_INPUT_CHANGE);
    AddEventToObserve(Observer::MOUSE_POSITION_CHANGE);

    m_Impl->AddObserver(this);
}


//////////////////////////////////////////////////////////////////////////


Input::~Input()
{
    if (m_Impl)
    {
        m_Impl->RemoveObserver(this);
        delete m_Impl;
    }
}


//////////////////////////////////////////////////////////////////////////


void Input::ProcessInput()
{
    m_Impl->ProcessInput();
}


//////////////////////////////////////////////////////////////////////////


Input::Key Input::GetKey() const
{
    return m_Impl->GetKey();
}


//////////////////////////////////////////////////////////////////////////


Input::MousePosition Input::GetMousePosition() const
{
    return m_Impl->GetMousePosition();
}


//////////////////////////////////////////////////////////////////////////


void Input::OnEvent( Event _event, Observable* _observable )
{
    NotifyObservers(_event);
}


//////////////////////////////////////////////////////////////////////////
